package com.itheima.health.controller;


import com.itheima.health.resource.aliyunmessage.SMSUtils;
import com.itheima.health.resource.code.ValidateCodeUtils;
import com.itheima.health.resource.entity.Result;
import com.itheima.health.resource.pub.MessageConstant;
import com.itheima.health.resource.pub.RedisMessageConstant;
import com.itheima.health.service.MemberService;
import com.itheima.health.service.SetmealService;
import com.itheima.pojo.Member;
import com.itheima.pojo.Setmeal;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 *   微信端的后台 业务处理
 */
@RestController
@RequestMapping("member")
public class MemberController {


    @Reference
    private MemberService memberService;

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     *
     * @param telephone
     * @return   不同的用户保存验证码要唯一，后续登录校验验证码 要获取指定用户的验证码  保存的key : 标识+用户手机号
     */
    @RequestMapping("sendCodeToYou.do")
    public  Result  sendCodeToYou(@RequestParam("telephone") String  telephone){
        try {
           //   随机生成一个验证码
            String randomcode = ValidateCodeUtils.generateValidateCode(4);
            System.out.println("---登录验证码： "+randomcode);
            //    阿里云短信发送 验证码
//            SMSUtils.sendMessageTuYou(telephone,randomcode);
            //   redis 保存 验证码 90s  单位是 毫秒     set(key,value,long expired.)
//            redisTemplate.opsForValue().set(RedisMessageConstant.SENDTYPE_LOGIN+telephone,randomcode,90000);  //  或者使用下面代码
            redisTemplate.opsForValue().set(RedisMessageConstant.SENDTYPE_LOGIN+telephone,randomcode,90, TimeUnit.SECONDS);
            return  new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return  new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
        }
    }


    /**
     *
     * @param telephone
     * @return   不同的用户保存验证码要唯一，后续登录校验验证码 要获取指定用户的验证码  保存的key : 标识+用户手机号
     */
    @RequestMapping("orderCodeToYou.do")
    public  Result  orderCodeToYou(@RequestParam("telephone") String  telephone){
        try {
           //   随机生成一个验证码
            String randomcode = ValidateCodeUtils.generateValidateCode(4);
            System.out.println("---预约套餐验证码： "+randomcode);
            //    阿里云短信发送 验证码
//            SMSUtils.sendMessageTuYou(telephone,randomcode);
            //   redis 保存 验证码 90s  单位是 毫秒     set(key,value,long expired.)
            redisTemplate.opsForValue().set(RedisMessageConstant.SENDTYPE_ORDER+telephone,randomcode,90000);  //  或者使用下面代码
            return  new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return  new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
        }
    }

    @RequestMapping("login.do")
    public  Result  login(@RequestParam("telephone") String  telephone,@RequestParam("code") String code){
        try {
            //   获取 redis 保存 验证码   比对
            if(code!=null){
                String  redisCode = (String)redisTemplate.opsForValue().get(RedisMessageConstant.SENDTYPE_LOGIN + telephone);

                if(redisCode==null){
                    //   超时  过期
                    return  new Result(false, MessageConstant.SEND_VALIDATECODE_TIMEOUT);
                }else{
                    //  redis  存在验证码  和用户输入的验证码进行比对
                    if(redisCode.equals(code)){
                        //   验证码正确    判断用户是否是新用户
                        //   用户 新用户 录入系统
                        memberService.addNewMember(telephone);
                        return  new Result(true, MessageConstant.VALIDATECODE_ERROR);
                    }else{
                        return  new Result(false, MessageConstant.VALIDATECODE_ERROR);
                    }
                }
            }else{
                return  new Result(false, "验证码非法");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return  new Result(false, e.getMessage());
        }
    }


}
